package Traductor;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import Dominio.*;
import DominioWS.*;

/**
 * Esta clase permite traducir el dominio web service a la aplicacion o viceversa
 * @author bracha
 *
 */
public class Traductor {
	
	public static Banco traductorBanco( BancoWS parametro ){
		
		Banco banco = new Banco();
		banco.set_id( parametro.get_id() );
		banco.set_nombre( parametro.get_nombre() );
		return banco;
	}

	public static BancoWS traductorBanco( Banco parametro ){
		
		BancoWS banco = new BancoWS();
		banco.set_id( parametro.get_id() );
		banco.set_nombre( parametro.get_nombre() );
		return banco;
	}
	
	public static Cliente traductorCliente ( ClienteWS parametro ){
		
		Cliente cliente = new Cliente();
		cliente.set_apellido( parametro.get_apellido() );
		cliente.set_cedula( parametro.get_cedula() );
		cliente.set_nombre( parametro.get_nombre() );
		cliente.set_correo( parametro.get_correo() );
		if( parametro.get_cuenta() != null)
			cliente.set_cuenta( 
					Traductor.traductorCuenta( parametro.get_cuenta() ) );
		if(parametro.get_tarjeta()!= null)
			cliente.set_tarjeta( 
					Traductor.traductorTarjeta(parametro.get_tarjeta() ) );
		
		return cliente;
	}
	
	public static ClienteWS traductorCliente ( Cliente parametro ){
		
		ClienteWS cliente = new ClienteWS();
		cliente.set_apellido( parametro.get_apellido() );
		cliente.set_cedula( parametro.get_cedula() );
		cliente.set_nombre( parametro.get_nombre() );
		cliente.set_correo( parametro.get_correo() );
		if(parametro.get_cuenta() != null)
			cliente.set_cuenta( 
					Traductor.traductorCuenta( parametro.get_cuenta() ) );
		
		if ( parametro.get_tarjeta()!= null )
			cliente.set_tarjeta( 
					Traductor.traductorTarjeta( parametro.get_tarjeta() ) );
		
		return cliente;
	}
	
	public static Cuenta traductorCuenta( CuentaWS parametro ){
		Cuenta cuenta = new Cuenta();
		try{
			cuenta.set_id(parametro.get_id());
			cuenta.set_alias(parametro.get_alias());
			if (parametro.get_banco() != null )
				cuenta.set_banco(traductorBanco( parametro.get_banco() ) );
			if( parametro.get_listaMovimiento()!= null )
				cuenta.set_lisistaMovimiento(
						traductorListaMovimiento(parametro.get_listaMovimiento()));
			if(parametro.get_montoBloqueado() != null)
				cuenta.set_montoBloqueado( 
						Double.parseDouble( parametro.get_montoBloqueado() ) );
			if(parametro.get_montoDisponible() != null)
				cuenta.set_montoDisponible( 
						Double.parseDouble( parametro.get_montoDisponible() ) );
			cuenta.set_numero(parametro.get_numero());
			cuenta.set_tipo(parametro.get_tipo());
		}catch(Exception e){
			
		}
		return cuenta;
	}
	
	public static CuentaWS traductorCuenta( Cuenta parametro ){
		CuentaWS cuenta = new CuentaWS();
		try{
			cuenta.set_id( parametro.get_id() );
			cuenta.set_alias(parametro.get_alias());
			
			if (parametro.get_banco() != null )
				cuenta.set_banco(traductorBanco( parametro.get_banco() ) );
			
			if( parametro.get_lisistaMovimiento()!= null )
				cuenta.set_listaMovimiento( 
						traductorListaMovimiento( parametro.get_lisistaMovimiento() ) );			
			
			cuenta.set_montoBloqueado( 
					String.valueOf( parametro.get_montoBloqueado() ) );
			cuenta.set_montoDisponible( 
					String.valueOf( parametro.get_montoDisponible() ) );
			cuenta.set_numero(parametro.get_numero());
			cuenta.set_tipo(parametro.get_tipo());
		}catch(Exception e){
			
		}
		return cuenta;
	}
	
	public static Movimiento traductorMovimiento ( MovimientoWS parametro ){
		Movimiento movimiento = new Movimiento();
		try {
			DateFormat formatoDelTexto = new SimpleDateFormat(" dd/MM/yyyy HH:mm");
			Date date = (Date)formatoDelTexto.parse(parametro.get_fecha());
			
			movimiento.set_descripcion( parametro.get_descripcion() );
			movimiento.set_fecha(date);
			movimiento.set_monto(Double.valueOf( parametro.get_monto() ) );
			movimiento.set_id(parametro.get_id());
			
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			
		}catch(Exception e){
			
		}
		return movimiento;
	}
	
	public static MovimientoWS traductorMovimiento ( Movimiento parametro ){
		MovimientoWS movimiento = new MovimientoWS();
		try {
			DateFormat formatoDelTexto = new SimpleDateFormat(" dd/MM/yyyy HH:mm");
			Date date = parametro.get_fecha();
			
			movimiento.set_descripcion( parametro.get_descripcion() );
			movimiento.set_fecha(formatoDelTexto.format(date));
			movimiento.set_monto(String.valueOf( parametro.get_monto() ) );
			movimiento.set_id(parametro.get_id());
			
		} catch(Exception e){
			
		}
		return movimiento;
	}
	
	public static ParametroWS traductorParametro( Parametro parametro ){
		
		DateFormat formatoDelTexto = new SimpleDateFormat(" dd/MM/yyyy HH:mm");
		
		ParametroWS parametro1 = new ParametroWS();
		parametro1.set_codigoComercio(parametro.get_codigoComercio());
		parametro1.set_fechaDesde( formatoDelTexto.format(parametro.get_fechaDesde()) );
		parametro1.set_fechaHasta( formatoDelTexto.format(parametro.get_fechaHasta()) );
		parametro1.set_mes( parametro.get_mes() );
		parametro1.set_monto( Double.toString(parametro.get_monto()) );
		parametro1.set_nuevoCliente( traductorCliente( parametro.get_nuevoCliente() ) );
		parametro1.set_usuario( traductorUsuario( parametro.get_usuario() ) );
		return parametro1;
	}
	
	public static Parametro traductorParametro( ParametroWS parametro ){
		Parametro parametro1 = new Parametro();
		
		try {
			if ( (parametro.get_fechaDesde() != null) || 
					(parametro.get_fechaDesde() != null) ){
				DateFormat formatoDelTexto = new SimpleDateFormat("dd/MM/yyyy HH:mm");
				Date fechaDesde = (Date)formatoDelTexto.parse(parametro.get_fechaDesde());
				Date fechaHasta = (Date)formatoDelTexto.parse(parametro.get_fechaHasta());
				parametro1.set_fechaDesde( fechaDesde );
				parametro1.set_fechaHasta( fechaHasta );
			}			
			parametro1.set_codigoComercio(parametro.get_codigoComercio());
			parametro1.set_mes( parametro.get_mes() );
			
			if ( parametro.get_monto() != null)
				parametro1.set_monto( 
						Double.parseDouble( parametro.get_monto() ) );
			if (parametro.get_nuevoCliente() != null)
				parametro1.set_nuevoCliente( 
						traductorCliente( parametro.get_nuevoCliente() ));
			if (parametro.get_usuario() != null)
				parametro1.set_usuario( traductorUsuario( parametro.get_usuario() ) );
		} catch (ParseException e) {
			System.out.println(e.getMessage());// TODO Auto-generated catch block
		
		}catch(Exception e){
			
		}
		return parametro1;
	}
	
	public static Movimiento[] traductorListaMovimiento( MovimientoWS[] parametro ){
		if (parametro != null){
			Movimiento[] listaMovimiento = new Movimiento[ parametro.length ];
			try{
				for (int i = 0; i < parametro.length; i++ ){
					listaMovimiento[ i ] = traductorMovimiento( parametro[ i ] );
				}
			}catch(Exception e){
				
			}
			return listaMovimiento;
		}else
			return null;
		
	}
	
	public static MovimientoWS[] traductorListaMovimiento( Movimiento[] parametro ){
		if(parametro == null){
			return null;
		}else{
			MovimientoWS[] listaMovimiento = new MovimientoWS[ parametro.length ];
			try{
				for (int i = 0; i < parametro.length; i++ ){
					listaMovimiento[ i ] = traductorMovimiento( parametro[ i ] );
				}
			}catch(Exception e){
				
			}
			return listaMovimiento;
		}
	}
	
	public static TarjetaWS traductorTarjeta ( Tarjeta parametro ){
		TarjetaWS tarjeta = new TarjetaWS();
		try{
			tarjeta.set_alias(parametro.get_alias());
			
			if(parametro.get_banco()!= null)
				tarjeta.set_banco(traductorBanco( parametro.get_banco() ) );
			
			if(parametro.get_lisistaMovimiento() != null)
				tarjeta.set_listaMovimiento(
						traductorListaMovimiento( 
								parametro.get_lisistaMovimiento()));
	
			tarjeta.set_montoBloqueado( String.valueOf( parametro.get_montoBloqueado() ) );
			tarjeta.set_montoDisponible( 
					String.valueOf( parametro.get_montoDisponible() ) );
			tarjeta.set_numero(parametro.get_numero());
			tarjeta.set_tipo(parametro.get_tipo());
		}catch(Exception e){
			
		}
		return tarjeta;
	}
	
	public static Tarjeta traductorTarjeta ( TarjetaWS parametro ){
		Tarjeta tarjeta = new Tarjeta();
		try{
			tarjeta.set_alias(parametro.get_alias());
			tarjeta.set_banco(traductorBanco( parametro.get_banco() ) );
			
			if (parametro.get_listaMovimiento() != null)
			tarjeta.set_lisistaMovimiento( 
					traductorListaMovimiento( parametro.get_listaMovimiento() ) );			
			tarjeta.set_montoBloqueado( 
					Double.parseDouble( parametro.get_montoBloqueado() ) );
			tarjeta.set_montoDisponible( 
					Double.parseDouble( parametro.get_montoDisponible() ) );
			tarjeta.set_numero(parametro.get_numero());
			tarjeta.set_tipo(parametro.get_tipo());
		}catch(Exception e){
			
		}
		return tarjeta;
	}
	
	public static UsuarioWS traductorUsuario( Usuario parametro ){
		UsuarioWS usuario = new UsuarioWS();
		
		usuario.set_contrasena(parametro.get_contrasena());
		if(parametro.get_cuentaMonedero() != null)
			usuario.set_cuentaMonedero( 
				Traductor.traductorCuenta( parametro.get_cuentaMonedero() ) );
		
		if (parametro.get_listaCuenta() != null)
			usuario.set_listaCuenta( 
						Traductor.traductorListaCuenta( 
								parametro.get_listaCuenta()) );
		if (parametro.get_listaServicios() != null)
			usuario.set_listaServicios( 
					Traductor.traductorListaCuenta( 
							parametro.get_listaServicios() ) );
		if( parametro.get_listaTarjeta() != null)
			usuario.set_listaTarjeta( 
					Traductor.traductorListaTarjeta( 
							parametro.get_listaTarjeta() ) );
		
		usuario.set_numeroTarjeta( parametro.get_numeroTarjeta() );
		usuario.set_numeroTelefonico( parametro.get_numeroTelefonico() );
		
		return usuario;
	}
	
	public static Usuario traductorUsuario( UsuarioWS parametro ){
		Usuario usuario = new Usuario();
		
		usuario.set_contrasena(parametro.get_contrasena());
		usuario.set_cuentaMonedero( 
				Traductor.traductorCuenta( parametro.get_cuentaMonedero() ) );
		if(parametro.get_listaCuenta() != null)
			usuario.set_listaCuenta( 
				Traductor.traductorListaCuenta( parametro.get_listaCuenta() ) );
		if(parametro.get_listaServicios() != null)
			usuario.set_listaServicios( 
				Traductor.traductorListaCuenta( parametro.get_listaServicios() ) );
		if(parametro.get_listaTarjeta() != null)
			usuario.set_listaTarjeta( 
				Traductor.traductorListaTarjeta( parametro.get_listaTarjeta() ) );
		usuario.set_numeroTarjeta( parametro.get_numeroTarjeta() );
		usuario.set_numeroTelefonico(parametro.get_numeroTelefonico());
		return usuario;
	}
	
	public static Banco[] traductorListaBanco( BancoWS[] parametro ){
			Banco[] listaBanco = new Banco[ parametro.length ];
			try{
				for (int i = 0; i < parametro.length; i++ ){
					listaBanco[ i ] = traductorBanco( parametro[ i ] );
				}
			}catch(Exception e){
				
			}
			return listaBanco;
	}
	
	public static BancoWS[] traductorListaBanco( Banco[] parametro ){		
			BancoWS[] listaBanco = new BancoWS[ parametro.length ];
			try{
				for (int i = 0; i < parametro.length; i++ ){
					listaBanco[ i ] = traductorBanco( parametro[ i ] );
				}
			}catch(Exception e){
				
			}
			return listaBanco;
	}
	
	public static Cuenta[] traductorListaCuenta( CuentaWS[] parametro ){
			Cuenta[] listaCuenta = new Cuenta[ parametro.length ];
			try{
				for (int i = 0; i < parametro.length; i++ ){
					listaCuenta[ i ] = traductorCuenta( parametro[ i ] );
				}
			}catch(Exception e){
				System.out.println(e.getMessage());
			}
			return listaCuenta;
	}
	
	public static CuentaWS[] traductorListaCuenta( Cuenta[] parametro ){
			CuentaWS[] listaCuenta = new CuentaWS[ parametro.length ];
			try{
				for (int i = 0; i < parametro.length; i++ ){
					listaCuenta[ i ] = traductorCuenta( parametro[ i ] );
				}
			}catch(Exception e){
				
			}
			return listaCuenta;
	}
	
	public static Tarjeta[] traductorListaTarjeta( TarjetaWS[] parametro ){		
			Tarjeta[] listaTarjeta = new Tarjeta[ parametro.length ];
			try{
				for (int i = 0; i < parametro.length; i++ ){
					listaTarjeta[ i ] = traductorTarjeta( parametro[ i ] );
				}
			}catch(Exception e){
				
			}
			return listaTarjeta;
	}
	
	public static TarjetaWS[] traductorListaTarjeta( Tarjeta[] parametro ){
			TarjetaWS[] listaTarjeta = new TarjetaWS[ parametro.length ];
			try{
				for (int i = 0; i < parametro.length; i++ ){
					listaTarjeta[ i ] = traductorTarjeta( parametro[ i ] );
				}
			}catch(Exception e){
				
			}
			return listaTarjeta;
	}
}